﻿using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.SharePoint;
using Microsoft.Office.Server;
using Microsoft.Office.Server.Search;
using Microsoft.Office.Server.Search.Query;
using System.Data;
using System.Xml;
using Siderys.Blog.Search.Engine.Resultado;
namespace Siderys.Blog.Search.Engine
{
    public class ConsultaDOM
    {
        private string mAmbito = string.Empty;
        private string mTxtBusqueda = string.Empty;
        KeywordQuery lQueryMoss = null;
        ResultTableCollection lResultadoBusqueda = null;
        public ConsultaDOM(string pTxtBusqueda,string pAmbito)
        {
            mAmbito = pAmbito;
            mTxtBusqueda = pTxtBusqueda;
            lQueryMoss = new KeywordQuery(ServerContext.GetContext("SSPSidmossfa"));
        }
        public ConsultaDOM(string pTxtBusqueda, string pAmbito, string pSite)
        {
            mAmbito = pAmbito;
            mTxtBusqueda = pTxtBusqueda;
            SPSite lSiteBusqueda = new SPSite(pSite);
            lQueryMoss = new KeywordQuery(lSiteBusqueda);
        }
        public XmlNode GetResultadoBusqueda()
        {
            XmlDocument lRetorno = null;
            lQueryMoss.QueryText = ArmarConsulta();
            lQueryMoss.ResultTypes |= ResultType.RelevantResults;
            lResultadoBusqueda = lQueryMoss.Execute();
            lRetorno = new XmlDocument();
            if (lResultadoBusqueda[ResultType.RelevantResults].RowCount > 0)
            {
                lRetorno.LoadXml(Utility.ReturnResultTableToXml(lResultadoBusqueda[ResultType.RelevantResults]));
            }
            return lRetorno;
        }
        public List<ObjetoResultado> GetResultadoBusquedaCol()
        {
            List<ObjetoResultado> lRetorno = null;
            lQueryMoss.QueryText = ArmarConsulta();
            lQueryMoss.ResultTypes |= ResultType.RelevantResults;
            lResultadoBusqueda = lQueryMoss.Execute();
            if (lResultadoBusqueda[ResultType.RelevantResults].RowCount > 0)
            {
                lRetorno = Utility.ReturnResultTableToList(lResultadoBusqueda[ResultType.RelevantResults]);
            }
            return lRetorno;
        }
        private string ArmarConsulta()
        {
            string lRetorno = string.Empty;
            lRetorno += mTxtBusqueda;
            if (!mAmbito.Equals(string.Empty))
            {
                lRetorno += " scope:\"" + mAmbito + "\"";
            }
            return lRetorno;
        }
     }
}
